package com.atguigu.lease.app.service.impl;

import com.atguigu.lease.app.service.FileService;
import com.atguigu.lease.common.config.MinioConfig;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService {

    @Autowired
    MinioClient minioClient;
    @Autowired
    MinioConfig minioConfig;

    @Override
    public String upload(MultipartFile file) {
        try {


            //3、上传文件到桶内
            // 获取上传文件的 文件名称
            String filename = file.getOriginalFilename();
            // 生成唯一的文件名: 唯一字符串+ 原文件的扩展名
            // 20250623/1231421412414_qeqweq1.jpg
            //拼接桶内保存文件的目录路径+文件名
            String path = new SimpleDateFormat("yyyyMMdd").format(new Date()) +
                    "/" + System.currentTimeMillis() + "_" + UUID.randomUUID().toString().substring(0, 6)
                    + filename.substring(filename.lastIndexOf("."));
            minioClient.putObject(PutObjectArgs.builder()  //putObject 通过文件流上传文件
                    //保存文件的桶
                    .bucket(minioConfig.getBucket())
                    //上传文件的文件流、流内容字节大小、分片大小(-1不分片)
                    .stream(file.getInputStream(), file.getInputStream().available(), -1)
                    //桶内文件的路径和名称
                    .object(path)
                    .build());

            //4、拼接上传成功的文件地址
            return minioConfig.getEndpoint() + "/" + minioConfig.getBucket() + "/" + path;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

